When providing a software developer kit (SDK) for video processing applications, it is desirable to include a large number of functionalities stored in libraries accessible to the software developer. The software developer may want to access all, some, or none of the functionalities. The SDK can additionally include a video processing application framework for executing basic video processing application functionality that can be expanded on by the developer. The libraries included in the SDK can be loaded by the video processing application either statically or dynamically.
Dynamic loading is a mechanism by which a computer program can, at run time, load a library into memory, retrieve the addresses of functions and variables contained in the library via names, execute those functions or access those variables, and unload the library from memory once the operations are done. This mechanism allows a computer program to startup in absence of these libraries, to discover available libraries, and to potentially gain additional functionalities. This makes it easy to control whether to use an additional functionality based on the results of dynamic loading. However, dynamic loading results in a slower application, due to the library load times, and the loss of optimizations possible by compiling the libraries together with the application. Dynamic loading can also cause problems if the version of the library loaded is not the version expected by the developer or if the library is not present, etc.
Static libraries avoid the problems of dynamic libraries, however, the advantages are lost as well. On the other hand, static libraries have a problem in that including a set of static libraries called by the framework requires all of the libraries to be linked to the final executable, increasing the executable size.